#!/bin/bash
# 使用多线程扫描进行目标ping

#记录每个ip的返回结果
resultfile="/tmp/proc_$$.res"
touch resultfile
echo "${result[*]}"
pingTest(){
    if ping -w 2 -c 2 "$1$2" &>/dev/null ; 
    then
	echo "$1$2">>$resultfile
    fi
}


netip="10.139.11."
# 设置一个命名管道

pipefile="/tmp/multiping_$$.tmp"
mkfifo $pipefile
exec 12<>$pipefile

#写入5个信号量,因为是管道,如果没人消费,会阻塞,所以使用后台子进程执行,
for i in {1..5}
do
    echo "">&12 & 
done

for i in {200..255}
do
# 使用-u读取文件句柄
    read -u 12
    {
        echo -e "\e[031m 开始执行ping操作\e[0m"
        pingTest $netip $i
        sleep 1
        echo -e "\e[031m 执行ping操作结束\e[0m"
        echo "">&12
    }&
done
wait 
rm -rf $pipefile

echo "执行结束"
echo "${result[*]}"

while read line
do
    echo "$line ping success"
done<$resultfile

rm -rf $resultfile


